/*
 * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package com.sun.corba.se.spi.protocol;

import java.nio.ByteBuffer;

import org.omg.CORBA.INTERNAL;
import org.omg.CORBA.SystemException;
import org.omg.CORBA.portable.ResponseHandler;
import org.omg.CORBA.portable.UnknownException;
import org.omg.CORBA_2_3.portable.InputStream;
import org.omg.CORBA_2_3.portable.OutputStream;

import com.sun.corba.se.pept.broker.Broker;
import com.sun.corba.se.pept.protocol.MessageMediator;
import com.sun.corba.se.pept.encoding.InputObject;
import com.sun.corba.se.pept.encoding.OutputObject;
import com.sun.corba.se.pept.protocol.ProtocolHandler;
import com.sun.corba.se.pept.transport.Connection;

import com.sun.corba.se.spi.ior.IOR;
import com.sun.corba.se.spi.ior.ObjectKey;
import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
import com.sun.corba.se.spi.protocol.CorbaProtocolHandler;
import com.sun.corba.se.spi.servicecontext.ServiceContexts;

import com.sun.corba.se.impl.protocol.giopmsgheaders.LocateReplyMessage;
import com.sun.corba.se.impl.protocol.giopmsgheaders.LocateReplyOrReplyMessage;
import com.sun.corba.se.impl.protocol.giopmsgheaders.Message;
import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase;
import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageHandler;
import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage;
import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_0;
import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage;
import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage_1_0;

/**
 * @author Harold Carr
 */
public interface CorbaMessageMediator
    extends
    MessageMediator,
    ResponseHandler {

  public void setReplyHeader(LocateReplyOrReplyMessage header);

  public LocateReplyMessage getLocateReplyHeader();

  public ReplyMessage getReplyHeader();

  public void setReplyExceptionDetailMessage(String message);

  public RequestMessage getRequestHeader();

  public GIOPVersion getGIOPVersion();

  public byte getEncodingVersion();

  public int getRequestId();

  public Integer getRequestIdInteger();

  public boolean isOneWay();

  public short getAddrDisposition();

  public String getOperationName();

  public ServiceContexts getRequestServiceContexts();

  public ServiceContexts getReplyServiceContexts();

  public Message getDispatchHeader();

  public void setDispatchHeader(Message msg);

  public ByteBuffer getDispatchBuffer();

  public void setDispatchBuffer(ByteBuffer byteBuffer);

  public int getThreadPoolToUse();

  public byte getStreamFormatVersion(); // REVIST name ForRequest?

  public byte getStreamFormatVersionForReply();

  // REVISIT - not sure if the final fragment and DII stuff should
  // go here.

  public void sendCancelRequestIfFinalFragmentNotSent();

  public void setDIIInfo(org.omg.CORBA.Request request);

  public boolean isDIIRequest();

  public Exception unmarshalDIIUserException(String repoId,
      InputStream inputStream);

  public void setDIIException(Exception exception);

  public void handleDIIReply(InputStream inputStream);


  public boolean isSystemExceptionReply();

  public boolean isUserExceptionReply();

  public boolean isLocationForwardReply();

  public boolean isDifferentAddrDispositionRequestedReply();

  public short getAddrDispositionReply();

  public IOR getForwardedIOR();

  public SystemException getSystemExceptionReply();

  ////////////////////////////////////////////////////
  //
  // Server side
  //

  public ObjectKey getObjectKey();

  public void setProtocolHandler(CorbaProtocolHandler protocolHandler);

  public CorbaProtocolHandler getProtocolHandler();

  ////////////////////////////////////////////////////
  //
  // ResponseHandler
  //

  public org.omg.CORBA.portable.OutputStream createReply();

  public org.omg.CORBA.portable.OutputStream createExceptionReply();

  ////////////////////////////////////////////////////
  //
  // from core.ServerRequest
  //

  public boolean executeReturnServantInResponseConstructor();

  public void setExecuteReturnServantInResponseConstructor(boolean b);

  public boolean executeRemoveThreadInfoInResponseConstructor();

  public void setExecuteRemoveThreadInfoInResponseConstructor(boolean b);

  public boolean executePIInResponseConstructor();

  public void setExecutePIInResponseConstructor(boolean b);
}

// End of file.
